package cn.tedu.oop;
/*本类用于面向对象的巩固练习*/
public class TestCar1 {
    //创建程序的入口函数main()
    public static void main(String[] args) {
        //3.创建汽车类对象c
        /*无法它其它类直接调用目标类的属性和方法,只能通过目标类的普通或匿名类对象调用相应属性和方法*/
        //System.out.println(color);
        //start();
        Car1 c = new Car1();
        //4.通过汽车类对象c设置属性值
//        c.color = "暗夜紫";
//        c.brand = "BMW";
//        c.price = 200;
//        c.length = 0.2;
        //5.查看刚刚设置好的属性值
//        System.out.println(c.brand);
//        System.out.println(c.price);
//        System.out.println(c.color);
//        System.out.println(c.length);
        //6.通过c对象调用汽车类的方法
        c.start();
        //c.stop();
        //7.3调用提供的set与get方法，设置并获取对应属性的值
        c.setBrand("特斯拉");
        c.setColor("black");
        c.setPrice(200.02);
        c.setLength(3);
        //其它类main下面的目标类对象,只能调用非私有权限修饰的属性和非私有修饰的方法
        System.out.println(c.brand1);
        //System.out.println(c.brand);
        System.out.println(c.getBrand());
        System.out.println(c.getColor());
        System.out.println(c.getLength());
        System.out.println(c.getPrice());
        //8.3 调用公共方法来实现私有方法功能的使用
        //c.stop();
        c.start();
    }
}
//1.抽象汽车这一类事物的属性与行为，封装成一个类组件
class Car1{
    public static void main(String[] args) {



        /*1 本类的main函数, 直接调用本类属性和方法*/

        System.out.println(price);  //直接调用,考虑直接使用static修饰属性
        System.out.println(price1);
        System.out.println(length);


        stop();
        start();

        /*2.1 本类main里面,创建本类的普通对象,调用本类的属性和方法,和四个权限修饰符或者static修饰符无关*/
        Car1 c1 = new Car1();
        String brand = c1.brand;
        System.out.println(brand);

        System.out.println(c1.price);
        System.out.println(c1.price1);


        c1.stop();
        c1.start();

        /*2.2 本类main里面,创建本类的匿名对象,调用本类的属性和方法,和四个权限修饰符或者static修饰符无关*/
        System.out.println(new Car1().brand1); //间接调用:通过对象调用,需要看是否被私有化
        System.out.println(new Car1().brand); //间接调用:通过对象调用,需要看是否被私有化

        new Car1().stop();
        new Car1().start();

    }
    //2.属性--用成员变量来描述
    //7.1封装所有的属性值--使用private修饰
    private String color;
    private String brand;
    protected String brand1;
    private static double price;
    static double price1;
    private static double length;
    //7.2 生成所有属性的get与set方法
    /*右键空白处->Generate->Getter and Setter->按住Shift全选所有属性生成即可*/
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    //3.行为--用方法来描述
    //8.2 可以在本类公共的方法里，调用私有方法
    static void start(){
        System.out.println("汽车开动了~");
        stop();//我们通过方法名+参数列表确定要调用哪个方法
    }
    //8.1封装方法，通过private修饰符
    private static void stop(){
        System.out.println("汽车停止了~");
    }
}
